package net.sf.postlet;
 	/*  Copyright (C) 2005 Simon David Rycroft
 	
 	        This program is free software; you can redistribute it and/or
 	        modify it under the terms of the GNU General Public License
 	        as published by the Free Software Foundation; either version 2
 	        of the License, or (at your option) any later version.
 	
 	        This program is distributed in the hope that it will be useful,
 	        but WITHOUT ANY WARRANTY; without even the implied warranty of
 	        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 	        GNU General Public License for more details.
 	
 	        You should have received a copy of the GNU General Public License
 	        along with this program; if not, write to the Free Software
 	        Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. */
 	
 	import java.io.File;
 	import java.util.Enumeration;
 	import java.util.Hashtable;
 	import javax.swing.filechooser.FileFilter;
 	
 	/**
 	 * @author  kmaclean
 	 */
 	public class UploaderFileFilter extends FileFilter {
 	
 	        private Hashtable filters = null;
 	        private String description = null;
 	        private String fullDescription = null;
 	        private boolean useExtensionsInDescription = true;
 	
 	        public UploaderFileFilter() {
 	        this.filters = new Hashtable();
 	        }
 	       
 	        public boolean accept(File f) {
 	        if(f != null) {
 	                if(f.isDirectory()) {
 	                                // Accept directories.  Change when code will allow.
 	                return true;
 	                }
 	                String extension = getExtension(f);
 	                if(extension != null && filters.get(getExtension(f)) != null) {
 	                return true;
 	                };
 	        }
 	        return false;
 	        }
 	
 	         public String getExtension(File f) {
 	        if(f != null) {
 	                String filename = f.getName();
 	                int i = filename.lastIndexOf('.');
 	                if(i>0 && i<filename.length()-1) {
 	                return filename.substring(i+1).toLowerCase();
 	                };
 	        }
 	        return null;
 	        }
 	         
 	        public void addExtension(String extension) {
 	        if(filters == null) {
 	                filters = new Hashtable(5);
 	        }
 	        filters.put(extension.toLowerCase(), this);
 	        fullDescription = null;
 	        }
 	       
 	        /**
 	         * @return  Returns the description.
 	         * @uml.property  name="description"
 	         */
 	        public String getDescription() {
 	        if(fullDescription == null) {
 	                if(description == null || isExtensionListInDescription()) {
 	                fullDescription = description==null ? "(" : description + " (";
 	                // build the description from the extension list
 	                Enumeration extensions = filters.keys();
 	                if(extensions != null) {
 	                        fullDescription += "." + (String) extensions.nextElement();
 	                        while (extensions.hasMoreElements()) {
 	                        fullDescription += ", ." + (String) extensions.nextElement();
 	                        }
 	                }
 	                fullDescription += ")";
 	                } else {
 	                fullDescription = description;
 	                }
 	        }
 	        return fullDescription;
 	        }
 	       
 	        /**
 	         * @param description  The description to set.
 	         * @uml.property  name="description"
 	         */
 	        public void setDescription(String description) {
 	        this.description = description;
 	        fullDescription = null;
 	        }
 	       
 	        public void setExtensionListInDescription(boolean b) {
 	        useExtensionsInDescription = b;
 	        fullDescription = null;
 	        }
 	       
 	        public boolean isExtensionListInDescription() {
 	        return useExtensionsInDescription;
 	        }
 	}